#ifndef __LM_NET_BASE_H
#define __LM_NET_BASE_H

#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string>
#include "lm_base.h"

using namespace std;

#ifdef __cplusplus
	extern "C" {
#endif


typedef struct 
{
	int 	sock;
	ushort	port;
	char	nety; //tcp or udp, or raw.
	char    ip[16];
	int		id;
	struct sockaddr_in  sadd;
	struct sockaddr_in  cadd;
	uint     addLen;
}sock_t;

int fd_closeexec(int fd);
int create_client_socket(sock_t *outSock);
int create_servere_socket(sock_t *outSock);
int set_sock_attr(int sock);
int set_block(char isblock, int sock);
int set_nodelay(bool v, int sock);
void fd_send_buff(int sock, uint sbuf);

int _accept(sock_t *server, sock_t *client);
int _connect(char isblock, sock_t *ck);
int _recv(char *data, uint size, sock_t *sk, sock_t *ck);
int _send(const char *data, int size, sock_t *sk);
int sendIov(struct iovec *iov, uint size, sock_t *sk);

string get_local_ip(int fd);
string get_client_ip(int fd);
int spara_ip_port(string &instr, string& ip, ushort &port);

#ifdef __cplusplus
		}
#endif

#endif

